Using OpenGL ES 3.0 in Kanzi

Kanzi supports the OpenGL ES 3.0 shading language (GLSL ES version 300). With OpenGL ES 3.0 you can use integer textures, floating point and multiple render targets. For example, this allows you to have more precision with the rendered images, you can apply better looking post-processing effects, use HDR for textures and cubemap textures, and create seamless cubemaps.

Before you use OpenGL ES 3.0 make sure that your target platform supports OpenGL ES 3.0.

To use OpenGL ES 3.0 in Kanzi:

Setting color format of textures

You can import to your Kanzi Studio project HDR and floating point images in .dds format and set the color format of textures which use these images.

To set the color format of textures:

  1. In the Project > Properties set the Target Graphics API to OpenGL ES 3.
  2. In the Library > Resource Files > Images select the image the color format of which you want to set.
  3. In the Properties set the Target Format property to Raw.
  4. In the Properties set the Color Format in Raw property to the color format you want Kanzi to use to interpret the texture.
  5. In the Library > Materials and Textures > Textures select the texture that uses the image the color format of which you set in the previous steps, and in the Properties set:

Setting the format of a render target texture

Set the format of a render target texture to define the target pixel format used by the GPU.

To set the format of a render target texture:

  1. In the Project > Properties set the Target Graphics API to OpenGL ES 3.
  2. In the Library > Materials and Textures > Textures select or create a Render Target Texture.
  3. In the Properties in Texture Settings set the Format to the target pixel format you want to use.
  4. If your render target textures are in integer target format, set the Minification Filter and Magnification Filter properties to Nearest.

Using multiple render targets

To use multiple render targets:

  1. In the Project > Properties set the Target Graphics API to OpenGL ES 3.
  2. In the Library > Rendering > Render Passes select or create a Legacy Render Pass (deprecated).
  3. In the Properties click and add the Render Target Color properties.
    You can add and set up to four color attachments to a Legacy Render Pass (deprecated).
  4. Set each Render Target Color property to where you want it to render.
    You can set a Legacy Render Pass (deprecated) to render to the screen or to a render target color attachment texture. You must set the color attachments in order, without gaps:
  5. In the shader set to which layout location you want to write. For example, if you use two color attachment textures, in the shader you can set
    layout(location = 0) out mediump vec4 outColor;
    layout(location = 1) out mediump vec3 outNormal;
  6. If you enabled the Clear Color property for the Legacy Render Pass (deprecated), for each Render Target Color property set the clear color by using either the Clear Color (Color Buffer 0) to Clear Color (Color Buffer 3) properties, or Color Buffer 0 Clear Value (float) (Color Buffer 0 Clear Value (integer)) to Color Buffer 3 Clear Value (float) (Color Buffer 3 Clear Value (integer)) properties:

Selecting runtime graphics backend

You can select whether you want to use ES or GL in the Application::onConfigure() function, in the application.cfg, or using the command line arguments, if your target supports command line arguments.

On the command line use:

In application.cfg GraphicsBackend = type
GraphicsContextAPI = contextAPI
In onConfigure() configuration.defaultSurfaceProperties.type = type;
configuration.defaultSurfaceProperties.contextApi = contextAPI;
Values
type

To use OpenGLES 2.0:

To use OpenGL:

contextAPI

To use WGL:

To use EGL:

To use GLX, in onConfigure() use KZS_GRAPHICS_CONTEXT_API_GLX.

application.cfg example
# Sets the surface target for OpenGLES 2.0 rendering and EGL graphics context.
GraphicsBackend = GLESGraphicsContextAPI = EGL
onConfigure() example
// Sets the surface target for OpenGLES 2.0 rendering and EGL graphics context.
configuration.defaultSurfaceProperties.type = KZS_SURFACE_TYPE_ES2_ONLY;
configuration.defaultSurfaceProperties.contextApi = KZS_GRAPHICS_CONTEXT_API_EGL;